python基础第二十节

本章节主要学习python的日志记录, 模块, 包.

20.1 日志记录

日志记录是一种重要的应用程序开发和维护技术, 它用于记录应用程序运行时的关键信息和事件.通过适当的日志记录, 我们可以追踪应用程序的行为、排查问题和监控系统状态.Python 提供了内置的 logging 模块, 使得日志记录变得简单而强大, 日志记录是将应用程序运行时的关键信息写入日志文件或输出到控制台.它有以下主要目的和优势:

20.2 python的日志记录模块

Python 提供了内置的 logging 模块, 它是一个强大而灵活的日志记录工具.要使用 logging 模块, 先导入, 然后创建日志记录器

import logging
logger = logging.getLogger('my_logger')

设置日志级别
日志级别决定了哪些日志消息会被记录下来.logging 模块定义了以下几个日志级别(从低到高):

logger.setLevel(logging.DEBUG)

创建日志处理程序并配置输出格式
日志处理程序是 logging 模块用于处理和输出日志消息的组件.我们可以为日志记录器添加一个或多个处理程序, 以决定日志消息的输出位置.

# 输出到控制台.
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
handler.setFormatter(formatter)

将处理程序添加到日志记录器.

logger.addHandler(handler)

将日志写入到文件
要将日志写入到文件只需要将创建日志处理程序的StreamHandler更换为FileHandler

file_handler = logging.FileHandler('my_logger.log')

20.3 logging的另外一种使用方式

logging.basicConfig(
    level=logging.DEBUG,
    format='[%(name)s] %(asctime)s [%(levelname)s] %(message)s',
)
logger = logging.getLogger('my_name')

20.4 python模块

在 Python 中, 模块是一个包含函数、变量和类等代码定义的py文件.模块可以被其他程序或模块导入, 并使用其中的代码.一个模块可以包含多个函数、变量和类, 它们可以被其他程序重复使用, 提供了代码的可重用性和组织性.
使用模块的主要优势之一是代码的可重用性.通过将相关的代码组织在模块中, 可以在不同的程序或项目中重复使用, 减少代码重复编写的工作量, 并提高代码的可维护性和可扩展性.
Python 提供了许多内置的模块, 这些模块包含了丰富的功能和工具, 可以直接在代码中使用.例如, math 模块提供了数学运算函数, datetime 模块提供了日期和时间操作函数, random模块提供了生成随机数等操作.
此外, 还有许多第三方模块可供使用.第三方模块是由独立的开发者或组织创建和维护的模块, 可以通过包管理工具如 pip 安装和导入到项目中, 提供了各种功能和扩展, 满足不同的需求.
导入模块

import math

导入后, 可以通过 module_name 来访问模块中的函数、变量或类.例如, 使用 math 模块中的 sqrt 函数:

result = math.sqrt(16)

**或者可以使用from-import来导入.可以选择性地导入模块中的特定函数、变量或类, 而不是导入整个模块. **

from math import sqrt
# 或者可以一次性导入多个.
from math import sqrt, ceil

as可以为导入的模块或对象指定一个别名, 以便在代码中更方便地引用.

import math as m
result = m.sqrt(16)

导入全部, 不推荐使用

from math import *
# 可以导入math中全部的.

__all__的作用
__all__ 变量主要适用于在使用 from module_name import * 语句时, 控制模块中哪些标识符可以被导入.
当一个模块中定义了 __all__ 变量时, 只有在 __all__ 列表中列出的标识符才会被导入.其他未在 __all__ 中列出的标识符将不会被导入.
这种机制可以用来控制通过 from module_name import * 导入的内容, 以避免意外地导入大量的标识符, 可能导致命名冲突或混乱的情况.

20.5 __name__ == '__main__'

用于确定当前模块是否作为主程序执行, 或者只是被导入到其他模块中使用.
具体含义如下:

20.6 python包

实际开发中, 一个大型的项目往往需要使用到很多的Python模块, 如果将这些模块都堆放在一起, 势必不好管理.而且, 使用模块可以有效避免变量名或函数名重名引发的冲突, 但是如果模块名重复怎么办呢?因此, Python提出了包(Package)的概念.
python的包就是一个文件夹, 只是在该文件里包含了一个__init__.py文件. 这个包里可以存放很多python的模块, 通过包, 在逻辑上将一批模块归为一类, 方便管理和使用.__init__.py文件用来标识此文件夹是一个python包.